package com.ctshk.rpc.booking.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ctshk.common.enums.IsDeletedCode;
import com.ctshk.common.utils.EntityUtil;
import com.ctshk.common.utils.SnowflakeIdWorker;
import com.ctshk.rpc.booking.dto.system.airexpress.info.SupplierSystemOrderAirExpressDetailInfoDTO;
import com.ctshk.rpc.booking.dto.system.airexpress.info.SupplierSystemOrderAirExpressInfoDTO;
import com.ctshk.rpc.booking.entity.SupplierSystemOrderAirExpressDetail;
import com.ctshk.rpc.booking.entity.SupplierSystemOrderAirExpressInfo;
import com.ctshk.rpc.booking.mapper.SupplierSystemOrderAirExpressDetailMapper;
import com.ctshk.rpc.booking.mapper.SupplierSystemOrderAirExpressInfoMapper;
import com.ctshk.rpc.booking.req.system.airexpress.add.SupplierSystemOrderAirExpressAddReq;
import com.ctshk.rpc.booking.req.system.airexpress.add.SupplierSystemOrderAirExpressDetailAddReq;
import com.ctshk.rpc.booking.service.ISupplierSystemOrderAirExpressInfoService;
import org.apache.dubbo.common.utils.CollectionUtils;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 系统内机场快线基础信息 服务实现类
 * </p>
 *
 * @author 谢诗宏
 * @since 2021-03-09
 */
@DubboService
public class SupplierSystemOrderAirExpressInfoServiceImpl implements ISupplierSystemOrderAirExpressInfoService {
    @Autowired
    SupplierSystemOrderAirExpressInfoMapper supplierSystemOrderAirExpressInfoMapper;

    @Autowired
    SupplierSystemOrderAirExpressDetailMapper supplierSystemOrderAirExpressDetailMapper;

    @Override
    public void add(Long id, Long userId, LocalDateTime nowDateTime, SupplierSystemOrderAirExpressAddReq supplierSystemOrderAirExpressAddReq) {
        if (supplierSystemOrderAirExpressAddReq != null) {
            SupplierSystemOrderAirExpressInfo supplierSystemOrderAirExpress = EntityUtil.copy(supplierSystemOrderAirExpressAddReq, SupplierSystemOrderAirExpressInfo.class);
            supplierSystemOrderAirExpress.setId(SnowflakeIdWorker.nextId());
            supplierSystemOrderAirExpress.setOrderId(id);
            supplierSystemOrderAirExpress.setCreateId(userId);
            supplierSystemOrderAirExpress.setGmtCreate(nowDateTime);
            supplierSystemOrderAirExpress.setModifiedId(userId);
            supplierSystemOrderAirExpress.setGmtModified(nowDateTime);
            supplierSystemOrderAirExpress.setIsDeleted(IsDeletedCode.NO.getCode());
            //添加旅客
            List<SupplierSystemOrderAirExpressDetailAddReq> supplierSystemOrderAirExpressDetailAddReqList = supplierSystemOrderAirExpressAddReq.getSupplierSystemOrderAirExpressDetailAddReqList();
            if (CollectionUtils.isNotEmpty(supplierSystemOrderAirExpressDetailAddReqList)) {
                ArrayList<SupplierSystemOrderAirExpressDetail> supplierSystemOrderAirExpressDetails = new ArrayList<>();
                supplierSystemOrderAirExpressDetailAddReqList.forEach(airTicketAdd -> {
                    SupplierSystemOrderAirExpressDetail supplierSystemOrderAirExpressDetail = EntityUtil.copy(airTicketAdd, SupplierSystemOrderAirExpressDetail.class);
                    supplierSystemOrderAirExpressDetail.setId(SnowflakeIdWorker.nextId());
                    supplierSystemOrderAirExpressDetail.setOrderId(id);
                    supplierSystemOrderAirExpressDetail.setAirExpressInfoId(supplierSystemOrderAirExpress.getId());
                    supplierSystemOrderAirExpressDetail.setCreateId(userId);
                    supplierSystemOrderAirExpressDetail.setGmtCreate(nowDateTime);
                    supplierSystemOrderAirExpressDetail.setModifiedId(userId);
                    supplierSystemOrderAirExpressDetail.setGmtModified(nowDateTime);
                    supplierSystemOrderAirExpressDetail.setIsDeleted(IsDeletedCode.NO.getCode());
                    supplierSystemOrderAirExpressDetails.add(supplierSystemOrderAirExpressDetail);
                });
                supplierSystemOrderAirExpressDetailMapper.insertBatchSomeColumn(supplierSystemOrderAirExpressDetails);
            }
            supplierSystemOrderAirExpressInfoMapper.insert(supplierSystemOrderAirExpress);
        }
    }

    @Override
    public List<SupplierSystemOrderAirExpressInfoDTO> selectByOrderId(Long id) {
        QueryWrapper<SupplierSystemOrderAirExpressInfo> airExpressQueryWrapper = new QueryWrapper<>();
        airExpressQueryWrapper.lambda().eq(SupplierSystemOrderAirExpressInfo::getOrderId, id);
        List<SupplierSystemOrderAirExpressInfo> supplierSystemOrderAirExpressList = supplierSystemOrderAirExpressInfoMapper.selectList(airExpressQueryWrapper);
        List<SupplierSystemOrderAirExpressInfoDTO> supplierSystemOrderAirExpressInfoDTOList = EntityUtil.copyList(supplierSystemOrderAirExpressList, SupplierSystemOrderAirExpressInfoDTO.class);
        if (CollectionUtils.isNotEmpty(supplierSystemOrderAirExpressInfoDTOList)) {
            supplierSystemOrderAirExpressInfoDTOList.forEach(airExpressDTO -> {
                //添加机票
                QueryWrapper<SupplierSystemOrderAirExpressDetail> airExpressDetailQueryWrapper = new QueryWrapper<>();
                airExpressDetailQueryWrapper.lambda().eq(SupplierSystemOrderAirExpressDetail::getOrderId, id);
                airExpressDetailQueryWrapper.lambda().eq(SupplierSystemOrderAirExpressDetail::getAirExpressInfoId, airExpressDTO.getId());
                List<SupplierSystemOrderAirExpressDetail> supplierSystemOrderAirExpressDetails = supplierSystemOrderAirExpressDetailMapper.selectList(airExpressDetailQueryWrapper);
                List<SupplierSystemOrderAirExpressDetailInfoDTO> supplierSystemOrderAirExpressDetailInfoDTOList = EntityUtil.copyList(supplierSystemOrderAirExpressDetails, SupplierSystemOrderAirExpressDetailInfoDTO.class);
                airExpressDTO.setSupplierSystemOrderAirExpressDetailInfoDTOList(supplierSystemOrderAirExpressDetailInfoDTOList);
            });
        }
        return supplierSystemOrderAirExpressInfoDTOList;
    }
}
